#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#include <omp.h>

void swap(int* a, int* b){
    int t = *a;
    *a = *b;
    *b = t;
}

void CreateData(int *arr, int size){
    srand(0);
    for (int i = 0; i < size; ++i)
        arr[i] = rand() % size;
}

void selection_sort(int *data, int n)
{
    int i, j, min, tmp;
    #pragma omp parallel for private(j,min,tmp)
        for (i = 0; i < n - 1; i++)
        {
            min = i;
            for (j = i + 1; j < n; j++)
                // 找到最小的元素
                if (data[j] < data[min])
                    min = j;
            // 把最小的元素放到数组的前面
            swap(&data[i], &data[min]);
        }
}

// 主函数
int main()
{    
    clock_t start, end;
    double total;
    int i;
    start = clock(); // 获取开始时间

    const int DataSize = 1e6;
    int data[DataSize];
    CreateData(data, DataSize);
    int n = sizeof(data) / sizeof(int);
    selection_sort(data, n);
    #pragma omp parallel 
    {
        #pragma omp barrier //等待所有进程结束
    }
    // int i;
    // for (i = 0; i < n; i++)
    // {
    //     printf("%d ", data[i]);
    // }
    
    end = clock();  //获取结束时间
    total = (double)(end - start)/CLOCKS_PER_SEC;  //计算耗时
    printf("Total time: %f seconds\n", total);
    return 0;
}